package com.lagou.jdbc03;

import com.lagou.utils.JDBCUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;

public class TestLogin02 {
    /*
    * SQL注入
    *   用户输入的用户名和密码 与我们编写的SQL进行了拼接 用户输入的内容成为了SQL语法的一部分
    *   用户会利用这里漏洞，输入一些其他的字符串，改变SQL原有的意思
    * 如何解决
    *   要解决SQL注入 就不能让用户输入的数据和我们的SQL进行直接的拼接
    * 预处理对象 PreparedStatement 他是Statement接口的子接口
    *   使用预处理对象 他有预编译的功能，提高SQL的执行效率
    *   使用预处理对象 通过占位符的方式 设置参数  可以有效的防止SQL注入
    * */

    public static void main(String[] args) throws Exception{
        //1.获取连接
        Connection connection= JDBCUtils.getConnection();
        //2.获取PreparedStatement对象
        //使用?占位符的方式来设置参数
        String sql="select * from jdbc_user where username=? and password=?";
        PreparedStatement ps = connection.prepareStatement(sql);
        //3.获取用户输入的用户名和密码
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入用户名:");
        String str1=sc.nextLine();
        System.out.println("请输入密码:");
        String str2=sc.nextLine();
        //4.设置参数 使用setXXX(占位符的位置,要设置的值)的方法设置占位符的参数
        ps.setString(1,str1); // 设置第一个问号值为str1
        ps.setString(2,str2); // 设置第二个问号值为str2
        //5.执行查询操作
        ResultSet resultSet = ps.executeQuery();
        //6.处理结果集
        if (resultSet.next()){
            System.out.println("登录成功!");
        }else{
            System.out.println("登录失败!");
        }
        //7.关闭流
        JDBCUtils.close(connection,ps,resultSet);
    }
}
